package org.example.compnent;

import org.example.common.enums.FileParser;
import org.example.common.enums.FileType;
import org.example.common.result.FileParseResult;
import org.example.compnent.Parser.CsvParser;
import org.example.compnent.Parser.XlsParser;
import org.example.compnent.Parser.XlsxParser;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

// 文件解析管理器（环境类）
@Component
public class FileParseManager {
    // 根据文件类型选择对应的解析器（核心：策略的选择）
    public FileParseResult parseFile(MultipartFile file) throws Exception {
        // 1. 获取文件的MIME类型（如"text/csv"）
        String mimeType = file.getContentType();
        // 2. 根据MIME类型确定文件类型（通过FileType枚举）
        FileType fileType = FileType.getByMimeType(mimeType);
        if (fileType == null) {
            throw new Exception("不支持的文件类型");
        }

        // 3. 根据文件类型选择对应的解析器（策略）
        FileParser parser;
        switch (fileType) {
            case CSV:
                parser = new CsvParser(); // CSV用CsvParser
                break;
            case EXCEL_XLS:
                parser = new XlsParser();
                break;
            case EXCEL_XLSX:
                parser = new XlsxParser(); // Excel用ExcelParser
               break;

//            // 其他类型...
            default:
                throw new Exception("未实现的文件类型解析");
        }

        // 4. 执行解析（调用具体策略的parse方法）
        return parser.parse(file);
    }
}